package com.yzd.learnjava.io;

import java.io.File;
import java.io.IOException;

import com.yzd.learnjava.util.Directory;
import com.yzd.learnjava.util.Print;

public class ProcessFiles {
	
	public interface Strategy{
		void process(File file);
	}
	
	private Strategy strategy;
	private String ext;
	public ProcessFiles(Strategy strategy, String ext) {
		this.strategy = strategy;
		this.ext = ext;
	}
	
	public void start(String[] args) throws IOException {
		if(args == null || args.length == 0) {
			processDirectoryTree(new File("."));
		} else {
			for(String arg : args) {
				File fileArg = new File(arg);
				if(fileArg.isDirectory()) {
					processDirectoryTree(fileArg);
				} else {
					if(!arg.endsWith("." + ext)) {
						arg += "." + ext;
					}
					strategy.process(new File(arg).getCanonicalFile());
				}
			}
		}
		
	}
	
	public void processDirectoryTree(File root) throws IOException {
		for(File file : Directory.walk(root.getAbsolutePath(), ".*\\." + ext)) {
			strategy.process(file.getCanonicalFile());
		}
	}
	
	public static void main(String[] args) throws IOException {
		new ProcessFiles(new Strategy() {
			public void process(File file) {
				Print.print(file);
			}
		}, "java").start(args);
	}

}
